/**
 * 主题服务
 * Theme Service
 * 
 * 负责：
 * 1. 从后端获取主题配置
 * 2. 管理主题配置的本地缓存
 * 3. 提供主题配置的获取接口
 * 
 * @version 2.0
 */

import request from '@/utils/request';
import { $globalRequestUrl } from '@/hooks/useFetch';

// 缓存键名
const THEME_CACHE_KEY = 'silly_tavern_theme_config';
const THEME_CACHE_EXPIRE_KEY = 'silly_tavern_theme_expire';
const CACHE_DURATION = 0; // 禁用缓存，始终从服务器获取最新主题（立即生效）

/**
 * 获取主题配置（已禁用缓存，始终从服务器获取最新配置）
 * @param {boolean} forceRefresh - 是否强制刷新（忽略缓存）
 * @returns {Promise<Object>} 主题配置对象
 */
const getThemeSettings = async (forceRefresh = false) => {
  try {
    // 由于缓存已禁用，始终从服务器获取最新主题配置
    console.log('[Theme] 从服务器获取最新主题配置（缓存已禁用）');
    
    const url = $globalRequestUrl({
      url: '/system/theme-settings',
    });

    const response = await request({
      url,
      method: 'get',
    });

    console.log('[Theme] API响应:', response);

    // 检查响应数据
    // 注意：项目的request函数已经自动解析了响应，直接返回data部分
    // 所以response本身就是主题配置对象，而不是 {data: {...}} 结构
    let themeData = null;
    
    if (response && typeof response === 'object') {
      // 如果response有data属性，说明返回的是 {data: {...}} 结构
      if (response.data && typeof response.data === 'object') {
        themeData = response.data;
        console.log('[Theme] 从response.data提取配置');
      } 
      // 如果response本身就包含theme_bg_primary，说明它就是主题配置
      else if (response.theme_bg_primary) {
        themeData = response;
        console.log('[Theme] response本身就是主题配置');
      }
    }
    
    if (themeData) {
      console.log('[Theme] 主题配置:', themeData);
      console.log('[Theme] 主背景色:', themeData.theme_bg_primary);
      
      // 保存到缓存
      saveThemeToCache(themeData);
      
      return themeData;
    } else {
      console.warn('[Theme] 服务器返回的主题配置为空，使用默认配置');
      console.log('[Theme] 原始响应:', response);
      return getDefaultTheme();
    }
  } catch (error) {
    console.error('[Theme] 获取主题配置失败:', error);
    
    // 如果请求失败，尝试使用缓存
    const cachedTheme = getCachedTheme();
    if (cachedTheme) {
      console.log('[Theme] 使用缓存的主题配置（降级方案）');
      return cachedTheme;
    }
    
    // 如果缓存也没有，使用默认主题
    console.log('[Theme] 使用默认主题配置（降级方案）');
    return getDefaultTheme();
  }
};

/**
 * 从缓存获取主题配置
 * @returns {Object|null} 主题配置对象或null
 */
const getCachedTheme = () => {
  try {
    const cachedData = localStorage.getItem(THEME_CACHE_KEY);
    const expireTime = localStorage.getItem(THEME_CACHE_EXPIRE_KEY);

    if (!cachedData || !expireTime) {
      return null;
    }

    // 检查是否过期
    const now = Date.now();
    if (now > parseInt(expireTime)) {
      console.log('[Theme] 缓存已过期');
      clearThemeCache();
      return null;
    }

    return JSON.parse(cachedData);
  } catch (error) {
    console.error('[Theme] 读取缓存失败:', error);
    return null;
  }
};

/**
 * 保存主题配置到缓存
 * @param {Object} themeData - 主题配置对象
 */
const saveThemeToCache = (themeData) => {
  try {
    const expireTime = Date.now() + CACHE_DURATION;
    localStorage.setItem(THEME_CACHE_KEY, JSON.stringify(themeData));
    localStorage.setItem(THEME_CACHE_EXPIRE_KEY, expireTime.toString());
    console.log('[Theme] 主题配置已缓存');
  } catch (error) {
    console.error('[Theme] 保存缓存失败:', error);
  }
};

/**
 * 清除主题缓存
 */
const clearThemeCache = () => {
  try {
    localStorage.removeItem(THEME_CACHE_KEY);
    localStorage.removeItem(THEME_CACHE_EXPIRE_KEY);
    console.log('[Theme] 主题缓存已清除');
  } catch (error) {
    console.error('[Theme] 清除缓存失败:', error);
  }
};

/**
 * 获取默认主题配置
 * @returns {Object} 默认主题配置对象
 */
const getDefaultTheme = () => {
  return {
    // 背景色
    theme_bg_primary: '#000000',
    theme_bg_secondary: '#121212',
    theme_bg_card: '#1C1C1E',
    theme_bg_input: '#2c2c2c',
    theme_bg_bubble: '#282828',
    
    // 文字颜色
    theme_text_primary: '#ffffff',
    theme_text_secondary: '#E0E0E0',
    theme_text_muted: '#9e9e9e',
    theme_text_dark: '#4B4A4A',
    
    // 主题色
    theme_primary: '#e91e63',
    theme_primary_dark: '#DB2777',
    theme_secondary: '#f7b356',
    theme_accent: '#F08A5D',
    
    // 功能色
    theme_success: '#52C41A',
    theme_error: '#FF4D4F',
    theme_warning: '#FFB700',
    
    // 强调色
    theme_accent_info: '#2196F3',
    theme_accent_danger: '#FF4D6A',
    theme_accent_warning: '#F9B872',
    
    // 边框色
    theme_border_primary: '#333333',
    theme_border_secondary: '#2A2A2A',
  };
};

/**
 * 检查主题配置是否有效
 * @param {Object} themeData - 主题配置对象
 * @returns {boolean} 是否有效
 */
const isValidThemeConfig = (themeData) => {
  if (!themeData || typeof themeData !== 'object') {
    return false;
  }

  // 检查必要的字段
  const requiredFields = [
    'theme_bg_primary',
    'theme_text_primary',
    'theme_primary',
  ];

  return requiredFields.every(field => field in themeData);
};

/**
 * 预加载主题配置
 * 在应用启动时调用，提前加载主题配置
 * @returns {Promise<Object>} 主题配置对象
 */
const preloadTheme = async () => {
  console.log('[Theme] 预加载主题配置');
  return await getThemeSettings();
};

// 移除版本号相关函数，因为已禁用缓存

export {
  getThemeSettings,
  getCachedTheme,
  saveThemeToCache,
  clearThemeCache,
  getDefaultTheme,
  isValidThemeConfig,
  preloadTheme,
};

